package com.koicarp.agent.example.aiservices2;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

import com.koicarp.agent.example.ChatModelInit;
import com.koicarp.agent.example.aiservices.Assistant;
import com.koicarp.agent.example.aiservices2.output.Assistant2;
import dev.langchain4j.data.image.Image;
import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.service.AiServices;

/**
 * @Author: liuxia
 * @CreateTime: 2025/9/16 下午14:13
 * @Description: Content test
 */
public class ContentTest {

	public static String IMAGE_URL = "https://img1.baidu.com/it/u=3068368972,4187084784&fm=253&fmt=auto&app=120&f=JPEG?w=1026&h=684";
	
	public static String IMAGE_PATH = "D:\\code\\langchain4j-agent-dev\\agent-example\\src\\main\\java\\com\\koicarp\\agent\\example\\aiservices2\\langChain4j.png";
	
	public static void main(String[] args) throws URISyntaxException {
		ChatModel model = ChatModelInit.initOllamaQwenVL();
		Assistant2 assistant = AiServices.builder(Assistant2.class)
				.chatModel(model)
				.chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))    // 默认使用内存缓存
				.build();
		String base64 = convertImageToBase64(IMAGE_PATH);
		ImageContent base64Content = ImageContent.from(base64, "image/png");
		String aiMessage = assistant.chatMultiModality("这个图片有什么元素", base64Content);
		System.out.println(aiMessage);
		/**
		 * 这个图片包含以下元素：
		 * 1. 一只鹦鹉：鹦鹉的羽毛主要是绿色的，头部有黄色和橙色的羽毛，喙是红色的，眼睛是黑色的。
		 * 2. 一杯茶：图片中有一只白色的茶杯，里面装有棕色的液体，看起来像是茶。
		 * 3. 茶杯的托盘：茶杯放在一个白色的托盘上。
		 * 4. 背景：背景是白色的，有一些模糊的黄色和橙色的渐变，可能是为了营造一种温暖的氛围。
		 * 整体来看，这个图片给人一种轻松愉快的感觉，可能是在表达一种悠闲的下午茶时光。
		 */
	}

	/**
	 * 测试文本内容
	 */
	public static void textContentTest() {
		TextContent content1 = TextContent.from("文本1");
		TextContent content2 = TextContent.from("文本2");
		UserMessage message = UserMessage.from(content1, content2);
	}
	
	/**
	 * imageContent支持url链接，URI，base64，Image
	 * @throws URISyntaxException
	 */
	public static void imageContentTest() throws URISyntaxException {
		
		// url
		ImageContent urlContent = ImageContent.from(IMAGE_URL);
		
		// uri
		URI uri = new URI(IMAGE_URL);
		ImageContent uriContent = ImageContent.from(uri);
		
		// base64
		String base64 = convertImageToBase64(IMAGE_PATH);
		ImageContent base64Content = ImageContent.from(base64, "image/png");
		
		// Image
		Image image = Image.builder().base64Data(base64).mimeType("image/png").build();
		ImageContent imageContent = ImageContent.from(image);
	}

	/**
	 * 路径转换base64
	 * @param imagePath
	 * @return
	 */
    public static String convertImageToBase64(String imagePath) {
        String base64String = "";
        try {
            Path path = Paths.get(imagePath);
            byte[] imageBytes = Files.readAllBytes(path);
            base64String = Base64.getEncoder().encodeToString(imageBytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return base64String;
    }

}
